perm filename TLKF3A.FAI[PNT,HE] blob sn#284661 filedate 1977-12-30 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE TLKEF3
C00006 00003	START OF EXECUTABLE CODE
C00013 00004	 	[LOCAL STORAGE AREA]
C00016 ENDMK
C⊗;
TITLE TLKEF3
INTERNAL TLKEF3

;"TLKEF3" IS A SAIL CALLABLE PROCEDURE FOR SENDING A COMMAND INSTRUCTION
;BLOCK FROM THE PDP10 TO THE PDP11.  THE INSTRUCTION BLOCK CONTAINS THE
;INFORMATION NECESSARY TO EXECUTE A MOVE INSTRUCTION.  A SAMPLE SAIL
;DECLARATION FOLLOWS:
;
;	TLKEF3(INTEGER MASTER;INTEGER ARRAY DATA);
;WHERE
;	MASTER= CHECK WORD TO ELF TO INSURE THIS IS A LEGAL INSTRUCTION
;	MOVE_CODE= TELL WHETHER THIS IS CENTER OR MOVE
;	DATA  = ADDR. OF COEFFICENT DATA ARRAY
;
;TLKEF3 EXPECTS THE MASTER NUMBER IN THE ELF TO BE SET TO 54321 WHEN THE ELF
;IS PREPARED TO ACCEPT A MOVE COMMAND.  AFTER THE LAST OF THE DATA HAS BEEN
;BEEN TRANSFERED BY "TLKEF3", THE MASTER NUMBER IS SET TO 12345.
;FOR MOVE THE CODE IS 76, FOR CENTER THE CODE IS 67.
;DEFINITIONS

P←17		;PUSH STACK REGISTER
CMDADD←40000	;MASTER NUMBER (WORD) ADDRESS IN ELF
CMDDAT←40001	;FIRST ADDRESS TO START TRANSFERING DATA 
DBUFL←=2000	;NUMBER OF WORDS IN DATA BUFFER
;START OF EXECUTABLE CODE

TLKEF3:	MOVEM	16,HOLD+14	;SAVE THE REGISTERS
	MOVE	16,[XWD 2,HOLD]
	BLT	16,HOLD+13
	IOPUSH	1,		;CALLER MIGHT WANT THIS CHANNEL
	JRST	[   OUTSTR CM0	;IOPDLOV MESSAGE
		    JRST   TLKDNE  ]
	INIT	1,17  		;INITIALIZE THE ELF
	SIXBIT	/ELF/
	0
	JRST	[   OUTSTR CM1		;ERROR RETURN
		    JRST   TLKDNE  ]
	GETSTS	1,1		;GET THE ELF STATUS WORD
	TRNE	1,777700	;CHECK FOR ERROR CONDITION
	JRST	[   OUTSTR CM2		;INDICATE STATUS ERROR
		    JRST   TLKDNE  ]
	
;CHECK IF ELF IS READY TO RECEIVE A COMMAND BLOCK

	MTAPE	1,MSTADD	;GET THE VALUE OF "MASTER" WORD IN ELF
	JRST	[   OUTSTR CM3		;ERROR RETURN
		    JRST   TLKDNE  ]
	MOVE	2,MASTER	;LOAD VALUE INTO REGISTER
	CAIE	2,12345		;CHECK IF CORRECT ELF MASTER NUMBER
	JRST    [ OUTSTR CM4	;ELF NOT READY FOR COMMAND IF NOT EQUAL
		    JRST   TLKDNE  ]

;SEND MOVE DATA TO "ELF"

	MOVE	2,-1(P)		;GET THE DATA ARRAY ADDRESSS
	SOJ	2,		;SETUP IOWD STATEMENT TO TRANSFER TO ELF
	OR	2,[XWD -DBUFL,0]
	MOVEM	2,OUTLST
	USETO	1,CMDMDE	;SET UP OUTPUT OF COMMAND BLOCK
	OUT	1,OUTLST	;SEND THE COMMAND LIST TO THE ELF
	JRST	.+2		;NORMAL RETURN
	JRST	[   OUTSTR CM5		;ERROR RETURN
		    JRST   TLKDNE  ]

;SIGNAL ELF THAT TRANFER OF DATA COMPLETE;

	MOVE	2,-2(P)		;GET THE MASTER NUMBER
	HRLI	2,1		;INDICATE SENDING ONLY ONE WORD
	MOVEM	2,NEWMAS	;SEND OUR MASTER NUMBER TO THE ELF
	MTAPE	1,FINSGN	;SEND FINISHED MESSAGE TO ELF
	JRST	[ OUTSTR CM6		;ERROR RETURN
	 	  JRST	TLKDNE ]

;RETURN TO CALLING PROGRAM

TLKDNE:	IOPOP	1,		;RELEASE THE ELF & RESTORE CHANNEL 1
	JFCL			;JUST CANNOT HAPPEN
       	MOVE 	16,[XWD HOLD,2]	;RESTORE THE REGISTERS
	BLT	16,15
	MOVE	16,HOLD+14
	SUB	P,[3(3)]	;POP ARGUMENTS OFF STACK
	JRST	@3(P)		;RETURN


;END OF "TLKEF3"
; 	[LOCAL STORAGE AREA]

HOLD:	BLOCK	15


;I/O DATA AREAS

MSTADD:	002004,,CMDADD	;INBUF LIST FOR ELF MASTER NUMBER
MASTER:	0		;VALUE OF "MASTER" LOCATION IN ELF

CMDMDE:	400004,,400000+CMDDAT	;MODE AND ADDRESS FOR COMMAND OUTPUT STRING

OUTLST:	IOWD -DBUFL,1	;OUT COMMAND LIST
	0

FINSGN:	001000,,CMDADD	;OUTBUF USED TO SEND TRANSFER COMPLETE MESSAGE
NEWMAS:	1,,0		;MASTER NUMBER FROM 10 TO 11


;OUTPUT STRINGS

CM0:	ASCIZ/IOPDLOV WHEN TRY TO SAVE CHANNEL 1 FOR "ELF"
/
CM1:	ASCIZ/CANNOT INIT "ELF"
/
CM2:	ASCIZ/"ELF" STATUS WORD INDICATES ERROR CONDITION
/
CM3:	ASCIZ/READING OF "ELF" READY FLAG FAILED
/
CM4:	ASCIZ/"ELF" NOT READY FOR MOVE COMMAND
/
CM5:	ASCIZ/BAD TRANSFER OF MOVE COMMAND TO "ELF"
/
CM6:	ASCIZ/BAD TRANSFER OF DONE COMMAND TO "ELF"
/

END